package org.jiamandan.com.strategy.impl.tram.cmd;

import com.alibaba.fastjson.JSON;
import io.netty.channel.Channel;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jiamandan.com.constant.BizConstant;
import org.jiamandan.com.dto.ZDCtrlDto;
import org.jiamandan.com.entity.RechargeGun;
import org.jiamandan.com.service.IRechargeGunService;
import org.jiamandan.com.strategy.impl.tram.TramBasicService;
import org.jiamandan.com.utils.CommonUtil;
import org.jiamandan.com.utils.ZDObjectUtil;
import org.springframework.stereotype.Service;

/**
 * @version Revision 1.0.1
 * @版权：版权所有 (c) 2021
 * @author:Jmd

 * @see:
 * @创建日期：2022-12-01 15:18
 * @功能说明：5.5. CMD=109 下发控制命令
 * 12.附录三：控制码定义
 * 序
 * 号
 * 控制名称 控制码定义 描述
 * 1 充电桩重启 0x01 充电桩收到后，立即重启
 * 2 预留 0x02 预留
 * 3 暂停服务 0x03 充电桩收到后，暂停服务
 * 4 恢复服务 0x04 充电桩收到后，恢复服务
 * 5 删除本地充电记录 0x05
 * 6 删除本地告警记录 0x06
 * @begin
 * @修改记录:
 * @修改后版本 修改人        修改内容
 * @2022-12-01 15:18	         Jmd        	创建
 * @end
 */
@Service
@AllArgsConstructor
public class ZDIssueCtrlService implements TramBasicService {

    private IRechargeGunService iRechargeGunService;

    @Override
    public void doExecute(byte[] data, Channel client) {
        ZDCtrlDto dto = JSON.parseObject(CommonUtil.bytesToString(data), ZDCtrlDto.class);
        RechargeGun gun = iRechargeGunService.getById(dto.getGunId());
        if (gun != null) {
            StringBuilder builder = new StringBuilder();
            builder.append(StringUtils.leftPad(Integer.toHexString(dto.getCtlCode()), 2));
            String payload = ZDObjectUtil.splicingMessage(builder.toString(), gun.getPileNo(), BizConstant.Cmd.CMD_109);
            client.writeAndFlush(payload);
        }
    }
}
